//
//  statusCell.swift
//  xinlangweibo
//
//  Created by yangshuo on 15/12/4.
//  Copyright © 2015年 yangshuo. All rights reserved.
//

import UIKit
//多个控制器使用同一常量时,将常量放在级别较高的控制器
let statusMargin: CGFloat = 12
let statusWidth: CGFloat = 35

//因为微博cell设置时,将cell分为上中下3部分,所以再创建2个视图
class StatusCell: UITableViewCell {
    //因为需要使用视图模型数据设置cell,所以在cell中需要创建一个视图模型属性
    //微博视图模型
    var viewModel: StatusViewModel?{
        didSet{
            topView.viewModel = viewModel
            contentLabel.text = viewModel?.status.text
            pictureView.viewModel = viewModel
            //提前能遇见到的东西,最好测试一下
            //测试修改配图高度 - 实际开发需要注意,如果动态修改约束高度
            //可能会导致行高计算错误
            //动态高度与自动计算行高会有冲突!
            
            //需要注意一点:make.width.equalTo(contentView.snp_width)与xxx.snp_updateConstraintsmake.width.equalTo(xxx.bounds.width),配对不在一起,需要注意!!!
            pictureView.snp_updateConstraints { (make) -> Void in
               // print("配图视图大小\(pictureView.bounds)")
                make.height.equalTo(pictureView.bounds.height)
                make.width.equalTo(pictureView.bounds.width)
                let offSet =  viewModel?.thumbnailUrls?.count > 0 ? statusMargin : 0
                make.top .equalTo(contentLabel.snp_bottom).offset(offSet)
            }
        }
    }
    //设置行高
    //设置cell行高的两个信息->1.视图模型会影响cell的高度(contentLabel, pictureView)
    //2.->底部视图在最下面
    func rowHeight(vm: StatusViewModel) -> CGFloat{
        //记录视图模型->会调用didset设置内容与更新约束
        viewModel = vm
        //强制更新约束->所有控件的frame都会被计算正确
        contentView.layoutIfNeeded()
        //返回底部视图最大Y
        return CGRectGetMaxY(bottomView.frame)
    }
    //调用cell,通常指定它的布局,需要写构造函数
    //注意cell的init没有frame
    override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
        //style用来提供系统默认的cell样式
        super.init(style: style, reuseIdentifier: reuseIdentifier)

        setupUI()
        selectionStyle = .None

    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    
//懒加载控件
    //草,到现在懒加载还能敲错!
    //顶部视图
    private lazy var topView: StatusCellTopView = StatusCellTopView()
    //微博正文标签
    private lazy var contentLabel: UILabel = UILabel(title: "微博正文", fontSize: 15, screenInset: statusMargin)
    //配图视图
    private lazy var pictureView: StatusPictureView = StatusPictureView()
    //底部视图
    private lazy var bottomView: StatusCellBottomView = StatusCellBottomView()
    
}
//MARK: - 设置界面
extension StatusCell{
  private func setupUI(){
    //将cell的内容放在contentview,用户的其它操作(支持编辑时左滑右滑)不会影响centview内部的布局,如果直接放在cell的根view,布局容易混乱
    //所以cententview用来设置cell的内容需要注意
    //1.添加控件
    //顶部视图
    contentView.addSubview(topView)
    //微博正文
    contentView.addSubview(contentLabel)
    //配图视图
    contentView.addSubview(pictureView)
    //底部视图
    contentView.addSubview(bottomView)
  

    //2.自动布局
    topView.snp_makeConstraints { (make) -> Void in
        //添加谁身上就去找谁
        make.top.equalTo(contentView.snp_top)
        make.left.equalTo(contentView.snp_left)
        make.right.equalTo(contentView.snp_right)
        //TODO: 临时高度
        make.height.equalTo(2 * statusMargin + statusWidth)
        
    }
    
    contentLabel.snp_makeConstraints { (make) -> Void in
        make.top .equalTo(topView.snp_bottom).offset(statusMargin)
        make.left.equalTo(topView.snp_left).offset(statusMargin)
        //自动计算行高第三步->需要一个自上而下的自动布局的控件，指定一个向下的约束
        //先从上而下计算控件的高度,然后预估高度在按照底部的约束条件,自下而上挤出最合适的高度
    }
    
    //配图视图
    pictureView.snp_makeConstraints { (make) -> Void in
        make.top.equalTo(contentLabel.snp_bottom).offset(statusMargin)
        make.left.equalTo(contentLabel.snp_left)
       // make.right.equalTo(contentLabel.snp_right)
        make.width.equalTo(300)
        make.height.equalTo(90)
    }
    
    bottomView.snp_makeConstraints { (make) -> Void in
        make.top.equalTo(pictureView.snp_bottom).offset(statusMargin)
        make.left.equalTo(contentView.snp_left)
        make.right.equalTo(contentView.snp_right)
        make.height.equalTo(44)
        //向下约束
      //  make.bottom.equalTo(contentView.snp_bottom)

    }
    }
}